package org.example.leetCode;

import java.util.HashMap;

/**
 * 350. 两个数组的交集
 * 给你两个整数数组 nums1 和 nums2 ，
 * 请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数，应与元素在两个数组中都出现的次数一致
 * （如果出现次数不一致，则考虑取较小值）。可以不考虑输出结果的顺序。
 *
 * 哈希表
 */
public class Code350_1 {

    public static int[] intersect(int[] nums1, int[] nums2) {
        HashMap<Integer,Integer> map=new HashMap<>();
        //将nums1中的元素和出现次数添加到哈希表中
        for(int num:nums1){
            map.put(num,map.getOrDefault(num,0)+1);
        }
        //用来记录交集的个数
        int k=0;
        //遍历nums2，得到num1和nums2的交集
        for(int num:nums2){
            if(map.getOrDefault(num,0)>0){
                nums2[k++]=num;
                map.put(num,map.getOrDefault(num,1)-1);
            }
        }
        int[] result = new int[k];
        System.arraycopy(nums2, 0, result, 0, k);
        return result;
    }

    public static void main(String[] args) {
        int[] nums1 = {1, 2, 2, 1};
        int[] nums2 = {2, 2};
        int[] result = intersect(nums1, nums2);
        for (int i : result) {
            System.out.print(i + " ");
        }
    }


}
